#ifndef __IComponent_H__
#define __IComponent_H__

namespace compfwk
{
    /** 
     * \brief Interface that models a component.
     *
     * For any component you can update it and query
     * the id of the entity it's part of.
     */
    class IComponent
    {
    public:
        //! Do what the component is designed for
        //! Implemented in concrete classes
        virtual void Update( void ) = 0;

        //! Get the id of the entity the component
        //! is part of
        virtual int GetEntityId( void ) = 0;

        //! Returns a clone of this component and sets the
        //! entity id to the one specified
        virtual IComponent* Clone( int a_eid ) const = 0;
    };
}
#endif